package com.eet.jpa.entity.member;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

/**
 * 角色用户关联实体类
 *
 * @author Administrator
 */
@Data
@Entity
@IdClass(RoleUserId.class)
@Table(name = "tb_role_user")
public class RoleUserDo {

    /**
     * 角色ID
     */
    @Id
    @Column(name = "role_id")
    private Integer roleId;

    /**
     * 用户ID
     */
    @Id
    @Column(name = "user_id")
    private Integer userId;
}

/**
 * 复合主键类:
 * 使用 @IdClass 批注为实体指定一个复合主键类（通常由两个或更多基元类型或
 * JDK 对象类型组成）。从原有数据库映射时（此时数据库键由多列组成），通常将出现复合主键。
 * <p>
 * 复合主键类具有下列特征：
 * <p>
 * 它是一个普通的旧式 Java 对象 (POJO) 类。
 * <p>
 * 它必须为 public，并且必须有一个 public 无参数构造函数。
 * <p>
 * 如果使用基于属性的访问，则主键类的属性必须为 public 或 protected。
 * <p>
 * 它必须是可序列化的。
 * <p>
 * 它必须定义 equals 和 hashCode 方法。
 * <p>
 * 这些方法的值相等性的语义必须与键映射到的数据库类型的数据库相等性一致。
 * <p>
 * 它的字段或属性的类型和名称必须与使用 @Id 进行批注的实体主键字段或属性的类型和名称相对应。
 */
class RoleUserId implements Serializable {
    /**
     * 角色ID
     */
    private Integer roleId;

    /**
     * 用户ID
     */
    private Integer userId;
}